package com.kexio.user.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.kexio.user.entity.Dept;

/**
 * 部门信息Mapper接口
 * 
 * @author kexio
 * @since 1.0.0
 */
@Mapper
public interface DeptMapper extends BaseMapper<Dept> {
    
    /**
     * 递归查询部门及其所有子部门ID
     */
    List<String> selectDeptAndChildIds(@Param("deptId") String deptId);
    
    /**
     * 查询部门的直接子部门ID列表
     */
    List<String> selectChildDeptIds(@Param("parentId") String parentId);
    
    /**
     * 查询用户所属部门ID
     */
    String selectUserDeptId(@Param("userId") String userId, @Param("tenantId") String tenantId);
    
    /**
     * 查询部门路径（从根部门到当前部门）
     */
    String selectDeptPath(@Param("deptId") String deptId);
    
    /**
     * ✅ 批量更新子部门层级（使用递归CTE，一条SQL搞定）
     * 
     * @param parentId 父部门ID
     * @param parentLevel 父部门层级
     * @return 更新的记录数
     */
    int batchUpdateChildDeptLevels(@Param("parentId") String parentId, @Param("parentLevel") Integer parentLevel);
    
    /**
     * ✅ 批量检查部门是否可删除（一条SQL搞定）
     * 
     * 检查部门是否有子部门或用户
     * 
     * @param deptIds 部门ID列表
     * @return Map<部门ID, 是否可删除>
     */
    java.util.List<java.util.Map<String, Object>> batchCheckDeletable(@Param("deptIds") java.util.List<String> deptIds);
}
